\documentclass{ctexart}

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}

\title{数值分析编程报告（1.8.2）}
\author{邵柯欣 \\ 3200103310 \\ 信息与计算科学}

\begin{document}
\maketitle

\section{$Makefile$}
在终端输入$\verb|make|$，编译并生成五个可执行文件$(PA_B，PA_C，PA_D，PA_E，PA_F)$分别
对应1.8.2中的五道编程题$(B，C，D，E，F)$。\\
在终端输入$\verb|make clear|$，删除生成的可执行文件。\\
在终端输入$\verb|make report|$，生成编程报告的PDF文件。\\
在终端输入$\verb|make reportclear|$，删除生成的可执行文件。\\
\section{$EquationSolver.h$}
头文件，包含函数的虚类$(Function)$、求解器的虚类$(EquationSolver)$、二分法
求解器$(Bisection)$、牛顿法求解器$(Newton)$、割线法求解器$(Secant)$。\\
二分法求解器$(Bisection)$，参考课本算法1.1。\\
牛顿法求解器$(Newton)$，参考课本算法1.5。\\
割线法求解器$(Secant)$，参考课本算法1.6。
\section{$PA_B.cpp$}
$1.8.2 Programming assignments B$ 的求解程序。\\
根据题目给出的函数创建四个对应的函数类$(F1, F2, F3, F4)$，再根据题目给出区间范围用头文件
$EquationSolver.h$ 中的二分法法求解器进行求根。\\
对应可执行文件$PA_B$。\\
在终端输入执行命令$\verb|./PA_B|$，得到结果：
\begin{verbatim}
function1'root is r1 = 0.860334, f(r) = -1.60923e-06
function2'root is r2 = 0.641185, f(r) = 3.29448e-06
function3'root is r3 = 1.82938, f(r) = -6.80514e-06
function4'root is r4 = 0.117878, f(r) = 243283
\end{verbatim}
对于第四个函数，用二分法无法求到根。将第四个函数$f4$看成是$f5/f6$，题目给定区间$[0,4]$,
显然$f5$在区间$[0,4]$内始终大于零，$f6$在区间内有根（根近似为二分法求出的$r4$）。因此可知
$f4$在区间$[0,4]$内不连续，且在不连续点取值为正无穷大。
\section{$PA_C.cpp$}
$1.8.2 Programming assignments C$ 的求解程序。\\
根据题目给出的函数创建一个对应的函数类$(F)$，再根据题目给出的初始值$x_0$
用头文件$EquationSolver.h$ 中的牛顿法求解器生成两个求根方程进行求根。\\
对应可执行文件$PA_C$。\\
在终端输入执行命令\verb|./PA_C|，得到结果：
\begin{verbatim}
function'root near 4.5 is r1 = 4.49341, f(r1) = 8.88178e-16
function'root near 7.7 is r2 = 7.72525, f(r2) = -2.30926e-14
\end{verbatim}
\section{$PA_D.cpp$}
$1.8.2 Programming assignments D$ 的求解程序。\\
根据题目给出的函数创建三个对应的函数类，再根据题目给出的初始值$x_0$
用头文件$EquationSolver.h$ 中的割线法求解器进行求根。\\
对应可执行文件$PA_D$。\\
在终端输入执行命令\verb|./PA_D|，得到结果：
\begin{verbatim}
when x_0 = 0, x_1 = pi/2, function1'root is r1 = 3.14144, f(r) = -3.03828e-09
when x_0 = 1, x_1 = 1.4, function1'root is r2 = 1.30633, f(r) = -4.44089e-16
when x_0 = 0, x_1 = -0.5, function1'root is r3 = -0.188685, f(r) = 0
\end{verbatim}
\section{$PA_E.cpp$}
$1.8.2 Programming assignments E$ 的求解程序。\\
题目要求对水槽深度$r-h$分别用三种求解方式进行求解，需要满足精度小于0.01。\\
对应可执行文件$PA_E$。\\
在终端输入执行命令\verb|./PA_E|，得到结果：
\begin{verbatim}
Bisection method, h1 = 0.167969, the depth is 0.832031
Newton method, h2 = 0.166166, the depth is 0.833834
Secant method, h3 = 0.166164, the depth is 0.833836
\end{verbatim}
\section{$PA_F.cpp$}
$1.8.2 Programming assignments F$ 的求解程序。\\
题目要求在不同初值条件下用不同的求解方法验证$\alpha$的值;比较割线法取初值
不同时的结果，讨论结果变化的原因。\\
对应可执行文件$PA_F$。\\
在终端输入执行命令\verb|./PA_F|，得到结果：
\begin{verbatim}
(a) Newton method, alpha = 32.9769
(b) Newton method, alpha = 33.1404
(c) Secant method, alpha(30~35) = 32.9722
    Secant method, alpha(0~90) = -212.972
\end{verbatim}
函数的解不唯一，当取值远离$\alpha$时，结果可能会收敛到其他根的位置。
\end{document}

